define(['module/ng-datatable/script' , 'ztree'],function(){
	var controller = function( $scope , $timeout , $ctx , $ajax ){
		pwin.setLabel('用户管理') ;
		$scope.searchParam = {} ;
		$scope.dataTable = {
			setting : {
				aoColumns : 	[{
					mData 	: 	'id' ,
					sTitle 	: 	'ID' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	true ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'username' ,
					sTitle 	: 	'账号' ,
					sWidth 	: 	'8%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'realName' ,
					sTitle 	: 	'用户姓名' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'orgName' ,
					sTitle 	: 	'用户组' ,
					sWidth 	: 	'8%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'roleName' ,
					sTitle 	: 	'角色' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'tokenTime' ,
					sTitle 	: 	'最后登陆日期' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'createTime' ,
					sTitle 	: 	'添加日期' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'createName' ,
					sTitle 	: 	'创建人' ,
					sWidth 	: 	'8%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'statusName' ,
					sTitle 	: 	'状态' ,
					sWidth 	: 	'8%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return typeof data == 'undefined' ? '--' : data ;
					}
				},{
					mData 	: 	'id' ,
					sTitle 	: 	'操作' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	true ,
					render 	: 	function( data , st , row ){
						var btnGroup = $('<div></div>').addClass('btn-group-inline') ;
						$('<a>修改</a>').attr({
							'class' 	: 	'btn btn-info btn-xs' ,
							'data-id' 	: 	data ,
							'name' : 	'modify-btn'
						}).appendTo( btnGroup ) ;

						$('<a>删除</a>').attr({
							'class' 	: 	'btn btn-danger btn-xs' ,
							'data-id' 	: 	data ,
							'name' : 	'delete-btn'
						}).appendTo( btnGroup ) ;

						$('<a>'+(row.status ? '激活' : '禁用')+'</a>').attr({
							'class' 	: 	'btn btn-warning btn-xs' ,
							'data-id' 	: 	data ,
							'name' : 	'status-btn'
						}).appendTo( btnGroup ) ;

						$('<a>初始化密码</a>').attr({
							'class' 	: 	'btn btn-warning btn-xs' ,
							'data-id' 	: 	data ,
							'name' : 	'passwd-btn'
						}).appendTo( btnGroup ) ;

						return btnGroup.children().length && btnGroup[0].outerHTML || '暂无操作' ;
					}
				}],
				ajaxSource : $ctx.api + 'user'  ,
			},
			table 	: 	undefined
		}
			
		var searchHandler = {//查询
			init 	: 	function(){
				$('form[name=search-form]').delegate('[name=search-btn]' , 'click' , function(){
					if( $scope.dataTable.table )
						$scope.dataTable.table.draw( true ) ;
				});
				return this;
			}
		}

		$scope.createData = {} ;
		var createHandler = {//新增			
			rule 	: 	{
				rules 	: 	{
					username : {
						required 	: 	true ,
						maxlength 	: 	20 ,
						minlength 	: 	6 
					},
					realName : 	{
						required 	: 	true ,
						maxlength 	: 	20 ,
						minlength 	: 	6 
					},
					roleId 	: 	{
						required 	: 	true
					}
				},
				messages 	: 	{

				}
			},
			init 	: 	function(){				
				this.modal = $('#user-create-modal') ;
				this.form = $('#user-create-form') ;
				var _this = this ;
				$('#user-create-btn').bind('click' , function(){
					_this.show() ;
				});
				$(this.modal).delegate('[name=positive-btn]' ,'click' , function(){
					_this.submit($scope.createData) ;
				});
				this.validator = $(this.form).validate( this.rule ) ;
				return this ;
			},
			reset 	: 	function(){
				var _this = this ;
				$timeout( function(){
					//重置样式
					$(_this.form).find('.has-error , .has-success').removeClass('has-success').removeClass('has-error') ;
					//重置数据
					$scope.createData = {} ;
				});
			},
			show 	: 	function(){				
				this.reset() ;//重置表单
				$('.modal-title').html('新增用户');
				$(this.modal).modal('show') ;
			},
			submit 	: 	function( data ){
				var _this = this ;
				if( !this.validator.form() )
					return false ;
				$ajax.post($ctx.api+'user', JSON.stringify( data ) ).success( function( result ){
					console.log('添加成功' , result ) ;
					if( result.code != 0 )
						return alert( result.message ) ;

					$(_this.modal).modal('hide') ;
					alert('添加成功!' ) ;
					$scope.dataTable.table.draw( true ) ;
				});
			}
		}

		
		
		$scope.modifyData = {} ;
		var modifyHandler = {//修改
			rule 	: 	{
				rules 	: 	{
					username : {
						required 	: 	true ,
						maxlength 	: 	20 ,
						minlength 	: 	6 
					},
					realName : 	{
						required 	: 	true ,
						maxlength 	: 	20 ,
						minlength 	: 	6 
					},
					roleId 	: 	{
						required 	: 	true
					}
				}
			},
			init: function() {	
				this.modal = $('#user-modify-modal') ;
				this.form = $('#user-modify-form') ;
				var _this = this ;
				$('#datatable-list').delegate('[name=modify-btn]', 'click', function() {			
					_this.show( $(this).attr("data-id") ); 
				});	
				$(this.modal).delegate('[name=positive-btn]' ,'click' , function(){
					_this.submit( $scope.modifyData ) ;
				});
				this.validator = $(this.form).validate( this.rule ) ;
				return this
			},
			loadDetail 	: 	function( id , then ){
				$ajax.get( $ctx.api + 'user/' + id ).success( function( result ){
					if( result.code != 0 )
						return alert( result.message ) ;

					var data = result.data ;
					if( !data )
						return alert('数据不存在!' ) ; 

					$timeout( function(){ 
						var fields = ['username','realName','roleId'] ;
						$scope.modifyData = {
							'username' 	: 	data['username'] ,
							'realName' 	: 	data['realName'] ,
							'roleId' 	: 	data['roleId']
						} ;
					});
					then( result.data ) ;
				});
			},
			reset 	: 	function(){
				var _this = this ;
				$timeout( function(){
					//重置样式
					$(_this.form).find('.has-error , .has-success').removeClass('has-success').removeClass('has-error') ;
					//重置数据
					$scope.modifyData = {} ;
				});
			},
			show 		: 	function( id ){
				if( typeof id == 'undefined' )
					return alert('请选择一条数据!') ;
				this.id = id ;

				this.reset() ;//重置表单

				var _this = this ;
				this.loadDetail( this.id , function( ){
					$(_this.modal).modal('show') ;
				});
			},
			submit 	: 	function( data ){
				if( !this.validator.form() )
					return false ;

				var _this = this ;
				$ajax.put( $ctx.api+'user/' + this.id ,JSON.stringify( data ) ).success( function( result ){
					if( result.code != 0 )
						return alert( result.message ) ;

					$(_this.modal).modal('hide') ;
					alert('更新成功!' ) ;
					$scope.dataTable.table.draw( false ) ;
				});
			}
		}

		var orgHandler = {//树
			init 	: 	function(){
				var _this = this ;
				var nodes = [{
					name 	: 	'银基安全'
				}] , setting = {
					callback 	: 	{
						onClick 	: 	function( ele , tag , node ){
							console.log( '组织点击事件' , node ) ;
							_this.getOrgUser( node.dataId ) ;
						}
					}
				} ;
				var _this = this ;
				this.loadData( 0 , function( dataList ){
					nodes[0]['children'] =  _this.getTreeNodes( dataList ) ;
					_this.tree = $.fn.zTree.init($("#org-tree"), setting , nodes );
				}) ;
				return this ;
			},
			getOrgUser 	: 	function( orgId ){
				$timeout( function(){
					$scope.searchParam['parentOrgId'] = orgId;
					$scope.dataTable.table.draw( true ) ;
				});
			},
			getTreeNodes : 	function( dataList , parentId ){
				if( !parentId ) parentId = 0 ;
				
				if( ! dataList || !dataList.length )
					return ;
				var _this = this , nodes = [] ;
				dataList.forEach( function( v , k ){
					if( v['parentId'] == parentId ){
						var cnode = {
							dataId 	: 	v['id'] ,
							name : 	v['shortName']
						};
						nodes.push( cnode );
						var cnodes = _this.getTreeNodes( dataList , v['id'] ) ;
						if( cnodes && cnodes.length )
							cnode.children = cnodes ;
					}	
				});
				return nodes ;
			},
			loadData : 	function( parentId , then ){
				$ajax.get($ctx.api+'org').success( function( result ){
					console.log( '加载组织信息' , result ) ;
					if( result.code != 0 )
						return alert( result.message ) ;

					then( result.data ) ;
				});
			}
		}

		var deleteHandler = {
			init 	: 	function(){
				var _this = this ;
				$('#datatable-list').delegate('[name=delete-btn]', 'click', function() {	
					var _ele = this ;		
					confirm('是否删除?' , function(){
						_this.del( $(_ele).attr("data-id") ) ;
					});
				});
				return this ;
			},
			del 	: 	function( id ){
				$ajax.remove( $ctx.api + '/user/' + id ).success( function( result ){
					if( result.code != 0 )
						return alert( result.message ) ;
					alert('删除成功!') ;
					$scope.dataTable.table.draw( false ) ;
				});
			}
		}

		var statusHandler = {
			init 	: 	function(){
				var _this = this ;
				$('#datatable-list').delegate('[name=status-btn]', 'click', function() {	
					var _ele = this ;		
					_this.updateStatus( $(_ele).attr("data-id") ) ;
				});
				return this ;
			},
			updateStatus 	: 	function( id ){
				$ajax.put( $ctx.api + '/user/' + id +'/status' ).success( function( result ){
					if( result.code != 0 )
						return alert( result.message ) ;
					alert('操作成功!') ;
					$scope.dataTable.table.draw( false ) ;
				});
			}
		}

		var passwdHandler = {
			init 	: 	function(){
				var _this = this ;
				$('#datatable-list').delegate('[name=passwd-btn]', 'click', function() {	
					var _ele = this ;		
					confirm('是否初始化用户密码?' , function(){
						_this.resetPasswd( $(_ele).attr("data-id") ) ;
					});
				});
				return this ;
			},
			resetPasswd 	: 	function( id ){
				$ajax.put( $ctx.api + '/user/' + id +'/passwd' ).success( function( result ){
					if( result.code != 0 )
						return alert( result.message ) ;
					alert('操作成功!') ;
					$scope.dataTable.table.draw( false ) ;
				});
			}
		}
		
		//页面初始化入口
		$timeout( function(){
			searchHandler.init() ;
			createHandler.init() ;
			orgHandler.init() ;
			modifyHandler.init() ;
			deleteHandler.init() ;
			statusHandler.init() ;
			passwdHandler.init() ;
		});
	}
	return controller ;
});